package com.spsoft.vatoutinv.service.vmsnvattrandtadvaltax;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.spsoft.core.model.Result;
import com.baomidou.mybatisplus.extension.service.IService;
import com.spsoft.system.entity.NvatTrandtadvaltaxsep;
import com.spsoft.vatoutinv.model.dto.transflowfindinvoice.TransFlowRecallInvoiceQueryDTO;
import com.spsoft.vatoutinv.model.dto.vmstransactionflowinvoice.*;
import com.spsoft.vatoutinv.model.vo.transflowfindinvoice.TransFlowRecallInvoiceRespVO;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsFlowInvoiceDetailVo;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsManualInvoiceVo;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsMergeQueryVo;
import com.spsoft.vatoutinv.model.vo.vmstransactionflowinvoice.VmsTransactionFlowInvoicePageVo;

import java.util.List;

/**
 * @author wangy
 * @description 针对表【NVAT_TRANDTADVALTAXSEP(交易数据信息表（共性字段表）
 * 注：对应数据模版字段包含共性字段（本表字段）+扩展信息字段，扩展信息字段对应表必须包含交易号、数据来源字段，采集数据时会将交易数据拆分成两部分数据。业务类型字段在数据采集时，按照业务梳理的给交易数据打上业务类型字段标识。
 * 如果应税判定字段不在扩展信息表在扩展表某个字段引用的其他表中，则以那张表的主键作为应税判定字段。
 * 数据采集时，如果没有交易客户编码的数据通过开户帐号与客户映射找到对应的客户编号来存储。
 * 该表的字段顺序请勿调整会影响批量开票存储过程。)】的数据库操作Service
 * @createDate 2024-01-04 13:05:39
 */
public interface VmsNvatTrandtadvaltaxsepService extends IService<NvatTrandtadvaltaxsep> {
    /**
     * 检查开票人状态
     */
    void checkStatus(String type);

    /**
     * 获取交易流水开票列表
     *
     * @param vmsTransactionFlowInvoicePageDto
     * @return
     */
    Result<IPage<VmsTransactionFlowInvoicePageVo>> getTransactionFlowInvoiceList(VmsTransactionFlowInvoicePageDto vmsTransactionFlowInvoicePageDto);

    /**
     * 根据交易流水号获取发票信息
     *
     * @param ids
     * @return
     */
    Result<VmsManualInvoiceVo> getInvoiceInfoByTransactionFlow(List<Long> ids);

    /**
     * 交易流水开票
     *
     * @param dto
     * @return
     */
    Result<Object> invoiceByTransactionFlow(VmsTransactionFlowInvoiceDto dto);

    /**
     * 交易流水追溯发票-查询交易流水信息
     *
     * @param queryDTO
     * @return
     */
    Result<IPage<TransFlowRecallInvoiceRespVO>> queryTransflow(TransFlowRecallInvoiceQueryDTO queryDTO);


    /**
     * 交易流水开票-流水拆分
     *
     * @param dto
     * @return
     */
    Result<Object> splitTransactionFlow(VmsFlowSplitDto dto);

    /**
     * 交易流水开票-合并查询
     *
     * @param dto
     * @return
     */
    Result<IPage<VmsMergeQueryVo>> mergeQuery(VmsMergeDto dto);

    /**
     * 交易流水开票-合并预处理
     *
     * @param dto
     * @return
     */
    Result<List<VmsMergeQueryVo>> preMerge(VmsMergeDto dto);

    /**
     * 交易流水开票-确定合并
     *
     * @param dto
     * @return
     */
    Result<Object> merge(VmsMergeDto dto);

    /**
     * 交易流水开票-查看合并/拆分信息
     *
     * @param id 流水rdid
     * @return
     */
    Result<VmsFlowInvoiceDetailVo> getMergeSplitInfo(String id);

    Result<IPage<VmsFlowInvoiceDetailVo>> getMergeSplitItem(VmsFlowInvoiceDetailDto dto);

    Result<Object> checkFlowInvoiceStatus(String id);

    Result<Object> restoreFlow(String id);
}
